package cn.cqautotest.downloadfile.network

import retrofit2.Retrofit
import java.util.concurrent.Executors

/**
 * object：Kotlin 中用来声明单例对象的
 */
object ServiceCreator {

    // 类似 Java 中的 final 修饰的变量（其实就是常量）
    private const val BASE_URL = "https://www.baidu.com/"

    private val retrofit: Retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL) //base的网络地址
        .callbackExecutor(Executors.newSingleThreadExecutor()) //设置线程,如果不设置下载在读取流的时候就会报错
        .build()

    fun <T> create(serviceClass: Class<T>) = retrofit.create(serviceClass)

    /**
     * 使用内联函数 inline 关键字 和 泛型实化 reified 关键字对函数的调用进行简化
     *
     * @return T ServiceCreator.create<DownloadFileApi>() 中的 DownloadFileApi 就是泛型 T
     */
    inline fun <reified T> create(): T = create(T::class.java)
}